/**
 * fileReader3.js - 使用 fs.createReadStream 流式读取文件并返回
 * 要求：
 * 1) 监听 8081 端口
 * 2) 运行时可传文件名：node 3.js <文件名>
 * 3) 若传入且存在：流式读取并显示；不存在则提示错误
 * 4) 未传入时：默认读取当前脚本（3.js）内容
 */

const http = require('http');
const fs = require('fs');
const path = require('path');

const port = 8081;
const cliFilename = process.argv[2];
const defaultFile = __filename;
const targetPath = path.join(__dirname, cliFilename || path.basename(defaultFile));

const server = http.createServer((req, res) => {
  if (req.url !== '/') {
    res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' });
    res.end('404 Not Found');
    return;
  }

  // 先检查文件是否存在
  fs.access(targetPath, fs.constants.F_OK, (err) => {
    if (err) {
      res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' });
      res.end(`文件不存在: ${targetPath}`);
      return;
    }

    res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
    const stream = fs.createReadStream(targetPath, { encoding: 'utf8' });

    stream.on('error', (e) => {
      res.statusCode = 500;
      res.end(`读取失败：${e.message}`);
    });

    // 将文件内容以流的方式发送到浏览器
    stream.pipe(res);
  });
});

server.listen(port, () => {
  console.log(`服务已启动：http://localhost:${port}/`);
  if (cliFilename) {
    console.log(`将以流方式读取: ${targetPath}`);
  } else {
    console.log('未提供文件名参数，默认返回当前脚本内容');
  }
});


